List,Set和Map详解

您所在的位置:网站首页 java list map set区别 List,Set和Map详解

List,Set和Map详解

2024-01-21 07:44| 来源: 网络整理| 查看: 265

List,Set和Map详解 Java集合三大类ListSetMap List,Set和Map的区别List,Set和Map的联系和使用场景ArrayList、Vector和LinkedList的区别ArrayList和LinkedList的使用场景HashSet、LinkedHashSet和TreeSet的区别TreeSet和TreeMap的联系和区别Set和Map的使用场景HashSet与HashMap的区别

本篇参考Java集合中List,Set以及Map等集合体系详解(史上最全),Set、List、Map的区别与联系,及面试重点问题两位博主写的写博文。我的这篇只是对其稍加整合了。

Java集合三大类

Java中的集合包括三大类:Set(集)、List(列表)和Map(映射),它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。

Collection是最基本的集合接口,声明了适用于JAVA集合的通用方法,List 和 Set都继承自collection接口。

List 允许重复的对象。 可以插入多个null元素。 是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。 常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。 Set 不允许重复对象 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。 只允许一个 null 元素 Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。 Map Map不是collection的子接口或者实现类。Map是一个接口。 Map的每个 Entry 都持有两个对象,也就是一个键一个值,Map可能会持有相同的值对象但键对象必须是唯一的。 TreeMap也通过Comparator或者Comparable维护了一个排序顺序。 Map里你可以拥有随意多个null 值但最多只能有一个null键。 Map接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用) List,Set和Map的区别

Set集合中的对象不按特定方式排序,并且没有重复对象。排序方式有默认排序和定制排序,定制排序需要实现Comparator接口。 List集合中的对象按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。 Map集合中的元素都包含一对键对象和值对象,键对象不可以重复,值对象可以重复。

List,Set和Map的联系和使用场景 ArrayList、Vector和LinkedList的区别 List 有序,可重复区别和联系ArrayList底层数据结构是数组,查询快,增删慢,线程不安全,效率高。当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间Vector底层数据结构是数组,查询快,增删慢,Vector的方法都是同步的(Synchronized),是线程安全的,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好LinkedList底层数据结构是链表,查询慢,增删快,线程不安全,效率高 ArrayList和LinkedList的使用场景 若经常使用索引对容器中的元素进行访问,那么使用List 。如果知道索引,那么 List 的实现类比如 ArrayList 可以提供更快速的访问,因为LinkedList要移动指针。如果经常添加、删除元素的,选LinkedList。 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 ArrayList是基于数组的,LinkedList是基于链表的。 HashSet、LinkedHashSet和TreeSet的区别 Set 无序,唯一HashSet底层数据结构是哈希表(数据无序,唯一)可以放入null,但只能放入一个null,两者中的值都不能重复,如数据库中唯一约束依赖两个方法:hashCode()和equals()来保证元素的唯一性只是通用的存储数据的集合LinkedHashSet底层数据结构是链表和哈希表。(FIFO插入有序,唯一)由链表保证元素有序由哈希表保证元素唯一用于保证FIFO即有序的集合(先进先出)TreeSet底层数据结构是红黑树。(唯一,有序)Treeset中的数据是自动排好序的,不允许放入null值。通过自然排序和比较器排序保证元素有序根据比较的返回值是否是0来决定来保证元素唯一性主要用于排序 TreeSet和TreeMap的联系和区别

与HashSet完全类似,TreeSet里面绝大部分方法都是直接调用TreeMap方法来实现的。 相同点:

TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步。运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1)。TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是排好序的。

不同点: 最主要的区别就是TreeSet和TreeMap分别实现Set和Map接口

TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)TreeSet中不能有重复对象,而TreeMap中value可以存在重复对象。TreeMap的底层采用红黑树的实现,完成数据有序的插入,排序。 什么时候用Set什么时候用Map呢? Set和Map的使用场景

如果希望保证插入元素的唯一性,不希望出现重复值,那么可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。如果是希望以键值的形式进行数据存储,那么用Map。根据需要选择Hashtable、HashMap或TreeMap。

HashSet与HashMap的区别 HashMapHashSet实现了Map接口实现Set接口存储键值对仅存储对象调用put()向map中添加元素调用add()方法向Set中添加元素HashMap使用键(Key)计算HashcodeHashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回falseHashMap相对于HashSet较快,因为它是使用唯一的键获取对象HashSet较HashMap来说比较慢


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3